package com.jt.redis;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

public class JedisDataSource {
    /**
     * volatile 关键通常用于修饰属性:
     * 1)保证线程其可见性(一个线程改了,其它CPU线程立刻可见)
     * 2)禁止指令重排序(例如count++,int temp=count;temp自身加1;count=temp)
     * 3)不能保证其原子性(不保证线程安全)
     */
    private static volatile JedisPool jedisPool;
    private static final String IP="192.168.126.128";
    private static final int PORT=6379;
//    方案1：饿汉式
//    static{
//        JedisPoolConfig config=new JedisPoolConfig();
//        config.setMaxTotal(16);//最大连接数，默认为8
//        config.setMaxIdle(60);
//        jedisPool=new JedisPool(config,HOST,PORT);
//    }
//    public static Jedis getConnection(){
//        return jedisPool.getResource();
//    }
//     方案2：懒汉式
    public static Jedis getConnection(){
        if(jedisPool==null){
            synchronized (JedisDataSource.class){
                if (jedisPool==null){
                    JedisPoolConfig config = new JedisPoolConfig();
                    config.setMaxTotal(16);
                    config.setMaxIdle(8);
                    jedisPool = new JedisPool(config,IP,PORT);
                }
            }
        }
        return jedisPool.getResource();
    }
}
